#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup() {

	ofBackgroundHex(0xff72a1);
	ofSetFrameRate(30);

	nextLetterTime = ofGetElapsedTimeMillis();
	lineCount      = 0;
	letterCount    = 0;

	// this is our buffer to stroe the text data
	ofBuffer buffer = ofBufferFromFile("ohplaces.txt");

	if(buffer.size()) {

		for (ofBuffer::Line it = buffer.getLines().begin(), end = buffer.getLines().end(); it != end; ++it) {

			string line = *it;

			// copy the line to draw later
			// make sure its not a empty line
			if(line.empty() == false) {
				seussLines.push_back(line);
			}

			// print out the line
			cout << line << endl;

		}

	}

}

//--------------------------------------------------------------
void ofApp::update(){

}

//--------------------------------------------------------------
void ofApp::draw() {

	// the total width on the line
	int strWidth = (seussLines[lineCount].length()*8) + 5;

	// x and y for the drawing
	float x = (ofGetWidth()-strWidth)/2;
	float y = ofGetHeight()/2;


	// we are slowy grabbing part of the line
	string typedLine = seussLines[lineCount].substr(0, letterCount);

	// draw the line
	ofSetColor(0);
	ofDrawRectangle(x, y, strWidth, 15);
	ofSetColor(255);
	ofDrawBitmapString(typedLine, x+4, y+11);


	// this is our timer for grabbing the next letter
	float time = ofGetElapsedTimeMillis() - nextLetterTime;

	if(time > 9) {

		// increment the letter count until
		// we reach the end of the line
		if(letterCount < (int)seussLines[lineCount].size()) {

			// move on to the next letter
			letterCount ++;

			// store time for next letter type
			nextLetterTime = ofGetElapsedTimeMillis();

		}
		else {

			// wait just a flash then move on
			// to the next line...
			if(time > 300) {

				nextLetterTime = ofGetElapsedTimeMillis();
				letterCount = 0;
				lineCount ++;
				lineCount %= seussLines.size();
			}

		}
	}


}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){

}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y){

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){

}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){

}
